GtkCellRendererAccel: Stop editing on focus out
authorMatthias Clasen <mclasen@redhat.com>
Sat, 6 Sep 2014 23:01:14 +0000 (19:01 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Sat, 6 Sep 2014 23:03:07 +0000 (19:03 -0400)
This is not automatic, and with grabs in place, it is awkward
to have focus moved elsewhere, so stop editing whenever the
cell editable loses focus.

gtk/gtkcellrendereraccel.c

index fbbd78c97333d8b3eb56c479fdb035db2b6200c9..eb660f5664b689bcc8e5aa7a98311ba370cddcf3 100644 (file)
@@ -660,7 +660,6 @@ gtk_cell_editable_event_box_key_press_event (GtkWidget   *widget,
 
  out:
   gtk_cell_renderer_accel_ungrab (GTK_CELL_RENDERER_ACCEL (box->cell));
-
   gtk_cell_editable_editing_done (GTK_CELL_EDITABLE (widget));
   gtk_cell_editable_remove_widget (GTK_CELL_EDITABLE (widget));
 
@@ -683,6 +682,19 @@ gtk_cell_editable_event_box_unrealize (GtkWidget *widget)
   GTK_WIDGET_CLASS (gtk_cell_editable_event_box_parent_class)->unrealize (widget); 
 }
 
+static gboolean
+gtk_cell_editable_event_box_focus_out (GtkWidget     *widget,
+                                       GdkEventFocus *event)
+{
+  GtkCellEditableEventBox *box = (GtkCellEditableEventBox*)widget;
+
+  gtk_cell_renderer_accel_ungrab (GTK_CELL_RENDERER_ACCEL (box->cell));
+  gtk_cell_editable_editing_done (GTK_CELL_EDITABLE (widget));
+  gtk_cell_editable_remove_widget (GTK_CELL_EDITABLE (widget));
+
+  return FALSE;
+}
+
 static void
 gtk_cell_editable_event_box_set_property (GObject      *object,
                                           guint         prop_id,
@@ -755,6 +767,7 @@ gtk_cell_editable_event_box_class_init (GtkCellEditableEventBoxClass *class)
 
   widget_class->key_press_event = gtk_cell_editable_event_box_key_press_event;
   widget_class->unrealize = gtk_cell_editable_event_box_unrealize;
+  widget_class->focus_out_event = gtk_cell_editable_event_box_focus_out;
 
   g_object_class_override_property (object_class,
                                     PROP_EDITING_CANCELED,